﻿using Dao;
using Interface.BO;
using Interface.DAO;
using JMI_Nucleo.JMIProvider;
using OR;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BO
{
    public class CategoriaFuncionario : ICategoriaFuncionario
    {
        private string msgErro;
        private ICategoriaFuncionarioDao<mCategoriaFuncionario> dao;

        public CategoriaFuncionario()
        {
            dao = DaoFactory<CategoriaFuncionarioDao>.Create();
        }

        public string MsgErro { get { return msgErro; } }

        private bool Valida(mCategoriaFuncionario _mCategoriaFuncionario)
        {
            bool sucesso = true;

            if (String.IsNullOrEmpty(_mCategoriaFuncionario.Descricao))
            {
                msgErro = "Descriçã, Campo Obrigatório.";
                sucesso = false;
            }
            else if (_mCategoriaFuncionario.Descricao.Length > 45)
            {
                msgErro = "Descrção, Campo deve possuir no máximo 45 caractr(es).";
                sucesso = false;
            }            
            return sucesso;
        }

        public bool Salvar(mCategoriaFuncionario infoCategoriaFuncionario, char Acao, int Codigo, short Empresa)
        {
            bool retorno = false;
            DbTransaction trans;
            try
            {
                EngineBD.Conectar();
                if (Valida(infoCategoriaFuncionario))
                {                    
                    trans = EngineBD.IniciaTransacao();

                    if (Acao == 'I')
                        retorno = dao.Inserir(infoCategoriaFuncionario);
                    else if (Acao == 'A')
                        retorno = dao.Alterar(infoCategoriaFuncionario);

                    EngineBD.FinalizaTransacao(trans, retorno);
                }
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return retorno;
        }
        public bool Excluir(int Codigo, short Empresa)
        {
            bool retorno = false;
            DbTransaction trans;
            try
            {
                EngineBD.Conectar();
                trans = EngineBD.IniciaTransacao();
                retorno = dao.Excluir(Codigo, Empresa);
                EngineBD.FinalizaTransacao(trans, retorno);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return retorno;
        }
        public mCategoriaFuncionario GetCategoriaFuncionario(int Codigo, short Empresa)
        {
            mCategoriaFuncionario _mCategoriaFuncionario;

            try
            {
                EngineBD.Conectar();
                _mCategoriaFuncionario = dao.GetCategoriaFuncionario(Codigo, Empresa);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return _mCategoriaFuncionario;
        }
        public List<mCategoriaFuncionario> GetLista(short Empresa)
        {
            List<mCategoriaFuncionario> lst = null;

            try
            {
                EngineBD.Conectar();
                lst = dao.GetLista(Empresa);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return lst;
        }

        public short GetCodigo(string Descricao, short Empresa)
        {
            short codigo = 0;

            try
            {
                EngineBD.Conectar();
                codigo = dao.GetCodigo(Descricao, Empresa);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return codigo;
        }
        public string GetDescricao(int Codigo, short Empresa)
        {
            string descricao = String.Empty;

            try
            {
                EngineBD.Conectar();
                descricao = dao.GetDescricao(Codigo, Empresa);
            }
            finally
            {
                EngineBD.Desconectar();
            }
            return descricao;
        }
    }
}
